/******************************************************************************
 * * nav.h - UI navigation
 *
 * *(C) Copyright 2019 Asr International Ltd.
 * * All Rights Reserved
 * ******************************************************************************/
#ifndef NAV_H
#define NAV_H

#ifdef __cplusplus
extern "C" {
#endif

/*********************
*      INCLUDES
*********************/
#include "ui_type.h"
/*********************
*      DEFINES
*********************/
#define ACTIVITY_ID_MAX        400 /* Max ID of activity */
#define ACTIVITY_STACK_SIZE    20  /* Activity stack size */

/**********************
*      TYPEDEFS
**********************/
enum {
    ACT_ID_DIAL_MAIN = 0,
    ACT_ID_DIAL_OPT,
    ACT_ID_DIAL_SAVE_SELECT_MEMORY,
    ACT_ID_DIAL_SAVE_CONTACT_NAME,
    ACT_ID_DIAL_SAVE_DONE,
    ACT_ID_DIAL_SAVE_REPLACE_INQUIRE,
    ACT_ID_DIAL_SAVE_REPLACE_DONE,
    ACT_ID_DIAL_ADD_TO_SCREEN_LIST_INQUIRE,
    ACT_ID_DIAL_ADD_TO_SCREEN_LIST_DONE,
    ACT_ID_DIAL_ADD_TO_SCREEN_LIST_EXISTED,
    ACT_ID_DIAL_CALL_SELECT_SIM,            /*10*/

    ACT_ID_CALL_EMERGENCY_CALLING,
    ACT_ID_CALL_EMERGENCY_ONLY_INFO,
    ACT_ID_CALL_CALLING,
    ACT_ID_CALL_END,
    ACT_ID_CALL_BUSY,
    ACT_ID_CALL_MAIN,
    ACT_ID_CALL_OPT,
    ACT_ID_CALL_LOUDSP_INQUIRE,
    ACT_ID_CALL_LOUDSP_ON,
    ACT_ID_CALL_LOUDSP_OFF,
    ACT_ID_CALL_MUTE,
    ACT_ID_CALL_UNMUTE,
    ACT_ID_CALL_HOLD,
    ACT_ID_CALL_UNHOLD,
    ACT_ID_CALL_NEWCALL_PHONE_NUMBER,
    ACT_ID_CALL_NEWCALL_SWAP,
    ACT_ID_CALL_INCOMING,
    ACT_ID_CALL_MISSED,
    ACT_ID_CALL_DTMF_INPUT,
    ACT_ID_CALL_LOG_MENU,
    ACT_ID_CALL_LOG_NO_NUMBERS,
    ACT_ID_CALL_LOG_NO_DIALLED_NUMBERS,
    ACT_ID_CALL_LOG_CALL_LIST,
    ACT_ID_CALL_LOG_OPT,
    ACT_ID_CALL_LOG_HISTORY_LIST,
    ACT_ID_CALL_LOG_HISTROY_VIEW,
    ACT_ID_CALL_LOG_PHONE_NUMBER,
    ACT_ID_CALL_LOG_EDIT_NUMBER,
    ACT_ID_CALL_LOG_DELETE_NUMBER_INQUIRE,
    ACT_ID_CALL_LOG_DELETE_NUMBER_DONE,
    ACT_ID_CALL_LOG_DURATION,
    ACT_ID_CALL_LOG_TIMERS_CLEARED,
    ACT_ID_CALL_LOG_DELETE_LIST,
    ACT_ID_CALL_LOG_DELETE_LIST_DONE,  /*44*/

    ACT_ID_MESSAGES,
    ACT_ID_MESSAGES_CREATE_MESSAGE,
    ACT_ID_MESSAGES_CREATE_MESSAGE_OPT,
    ACT_ID_MESSAGES_SIM_SELECTION,
    ACT_ID_MESSAGES_PHONE_NUMBER,
    ACT_ID_MESSAGES_CONTACTS,
    ACT_ID_MESSAGES_SENDING_MESSAGE,
    ACT_ID_MESSAGES_MESSAGE_SENT,
    ACT_ID_MESSAGES_CONTACTS_EMPTY,
    ACT_ID_MESSAGES_MESSAGE_NOT_SENT,
    ACT_ID_MESSAGES_SENDING_OPTIONS,
    ACT_ID_MESSAGES_CONTACTS_CB,
    ACT_ID_MESSAGES_SENDING_STATUS,
    ACT_ID_MESSAGES_SENDING_RESULT,
    ACT_ID_MESSAGES_SENDING_REPORT,
    ACT_ID_MESSAGES_RECIPIENTS,
    ACT_ID_MESSAGES_FAILED_OPTIONS,
    ACT_ID_MESSAGES_RESENDING_STATUS,
    ACT_ID_MESSAGES_FAILED_RECIPIENTS,
    ACT_ID_MESSAGES_NO_DISTRIBUTION_LIST,
    ACT_ID_MESSAGES_DISTRIBUTION_LIST_EMPTY,
    ACT_ID_MESSAGES_INSERT_OPTIONS,
    ACT_ID_MESSAGES_INSERT_WORD,
    ACT_ID_MESSAGES_INSERT_NUMBER,
    ACT_ID_MESSAGES_INSERT_SYMBOL,
    ACT_ID_MESSAGES_SAVE_MESSAGES,
    ACT_ID_MESSAGES_DICTIONARY,
    ACT_ID_MESSAGES_DICTIONARY_STATUS,
    ACT_ID_MESSAGES_MATCHES_BODY,
    ACT_ID_MESSAGES_OPENING,
    ACT_ID_MESSAGES_OPENING2,
    ACT_ID_MESSAGES_INBOX,
    ACT_ID_MESSAGES_INBOX_EMPTY,
    ACT_ID_MESSAGES_INBOX_MSGBODY,
    ACT_ID_MESSAGES_INBOX_OPT,
    ACT_ID_MESSAGES_DELETED_CONFIRM,
    ACT_ID_MESSAGES_DELETED_STATUS,
    ACT_ID_MESSAGES_DELETED_DONE,
    ACT_ID_MESSAGES_USE_NUM,
    ACT_ID_MESSAGES_USE_NUM_NO_NUM,
    ACT_ID_MESSAGES_DETAILS,
    ACT_ID_MESSAGES_SENT_ITEMS,
    ACT_ID_MESSAGES_SENT_ITEMS_OPT,
    ACT_ID_MESSAGES_DRAFTS,
    ACT_ID_MESSAGES_DRAFTS_BODY,
    ACT_ID_MESSAGES_DRAFTS_OPT,
    ACT_ID_MESSAGES_DISTRIBUTION_LISTS,
    ACT_ID_MESSAGES_DISTRIBUTION_OPT,
    ACT_ID_MESSAGES_DISTRIBUTION_BODY,
    ACT_ID_MESSAGES_DISTRI_BODY_OPT,
    ACT_ID_MESSAGES_DISTRIBUTION_NAME_USED,
    ACT_ID_MESSAGES_DISTRIBUTION_LIST_FULL,
    ACT_ID_MESSAGES_DISTRIBUTION_LIST_CONTACT_FULL,
    ACT_ID_MESSAGES_DISTRIBUTION_STATUS,
    ACT_ID_MESSAGES_DISTRI_BODY_DETAILS,
    ACT_ID_MESSAGES_DISTRI_BODY_REMOVE,
    ACT_ID_MESSAGES_DISTRI_REMOVE_STATUS,
    ACT_ID_MESSAGES_DISTRIBUTION_NAME,
    ACT_ID_MESSAGES_DISTRI_ADD_STATUS,
    ACT_ID_MESSAGES_DISTRIBUTION_CONFIRM,
    ACT_ID_MESSAGES_DISTRI_RENAME_STATUS,
    ACT_ID_MESSAGES_DISTRI_LIST_DELETE,
    ACT_ID_MESSAGES_DISTRI_DELETE_STATUS,
    ACT_ID_MESSAGES_SCREENED_MSGS,
    ACT_ID_MESSAGES_SCREENED_OPT,
    ACT_ID_MESSAGES_DELETED_LIST_CONFIRM,
    ACT_ID_MESSAGES_DELETED_LIST_STATUS,
    ACT_ID_MESSAGES_DELETE_MSGS,
    ACT_ID_MESSAGES_DELETE_READ_ALL_CONFIRM,
    ACT_ID_MESSAGES_DELETE_OPT,
    ACT_ID_MESSAGES_INBOX_UNMARKED,
    ACT_ID_MESSAGES_DELETE_FOLDER_STATUS,
    ACT_ID_MESSAGES_DELETE_MARK_CONFIRM,
    ACT_ID_MESSAGES_DELETE_ALL_READ_CONFIRM,
    ACT_ID_MESSAGES_DELETE_ALL_CONFIRM,
    ACT_ID_MESSAGES_SETTING,
    ACT_ID_MESSAGES_CENTRE_NUM,
    ACT_ID_MESSAGES_CENTRE_NUM_STATUS,
    ACT_ID_MESSAGES_SIM_SELECTION_STATUS,
    ACT_ID_MESSAGES_DELIVERY_REPORT,
    ACT_ID_MESSAGES_SEND_USING_STATUS,
    ACT_ID_MESSAGES_COMMAND_EDITOR,
    ACT_ID_MESSAGES_COMMAND_STATUS,
    ACT_ID_MESSAGES_COMMAND_RESULT,
    ACT_ID_MESSAGES_COMMAND_RESULT_FAIL,
    ACT_ID_MESSAGES_COMMAND_RESULT_ABORT,
    ACT_ID_MESSAGES_SIM_STOREAGE_FULL,/*131*/

    ACT_ID_CONTACTS,
    ACT_ID_CONTACTS_NO_PHONE_NUMBER,
    ACT_ID_CONTACTS_DETAILS,
    ACT_ID_CONTACTS_EDIT,
    ACT_ID_CONTACTS_EDIT_WARNING,
    ACT_ID_CONTACTS_SAVED,
    ACT_ID_CONTACTS_DETAILS_OPTION,
    ACT_ID_CONTACTS_NOT_READY,
    ACT_ID_CONTACTS_RING_TONE,
    ACT_ID_CONTACTS_RING_TONE_SELECTED,
    ACT_ID_CONTACTS_RING_TONE_NOT_SET,
    ACT_ID_CONTACTS_DETAILS_COPY,
    ACT_ID_CONTACTS_FULL,
    ACT_ID_CONTACTS_DETAILS_COPYING,
    ACT_ID_CONTACTS_DETAILS_COPIED,
    ACT_ID_CONTACTS_DETAILS_MOVE,
    ACT_ID_CONTACTS_DETAILS_MOVING,
    ACT_ID_CONTACTS_DETAILS_MOVED,
    ACT_ID_CONTACTS_DETAILS_DELETE,
    ACT_ID_CONTACTS_NUM_ALREADY_ON_LIST,
    ACT_ID_CONTACTS_NUM_SCRN_LIST_FULL,
    ACT_ID_CONTACTS_EDIT_DEL_NUM_SCREEN,
    ACT_ID_CONTACTS_EDIT_DEL_NUM_SCREEN_OK,
    ACT_ID_CONTACTS_OPTION,
    ACT_ID_CONTACTS_ADD_SEL_MEM,
    ACT_ID_CONTACTS_ADD,
    ACT_ID_CONTACTS_ADD_WARNING,
    ACT_ID_CONTACTS_REPLACE,
    ACT_ID_CONTACTS_SEARCH,
    ACT_ID_CONTACTS_COPY_SELECT,
    ACT_ID_CONTACTS_COPY,
    ACT_ID_CONTACTS_COPY_READY,
    ACT_ID_CONTACTS_COPYING,
    ACT_ID_CONTACTS_COPIED,
    ACT_ID_CONTACTS_COPY_QUIT,
    ACT_ID_CONTACTS_MOVE_SELECT,
    ACT_ID_CONTACTS_MOVE,
    ACT_ID_CONTACTS_MOVE_READY,
    ACT_ID_CONTACTS_MOVING,
    ACT_ID_CONTACTS_MOVED,
    ACT_ID_CONTACTS_MOVE_QUIT,
    ACT_ID_CONTACTS_DELETE,
    ACT_ID_CONTACTS_DELETE_READY,
    ACT_ID_CONTACTS_DELETING,
    ACT_ID_CONTACTS_DELETED,
    ACT_ID_CONTACTS_DELETE_QUIT,
    ACT_ID_CONTACTS_SETTINGS,
    ACT_ID_CONTACTS_MEMORY_STATUS,
    ACT_ID_CONTACTS_DISPLAY,
    ACT_ID_CONTACTS_SPEED_DIALS,
    ACT_ID_CONTACTS_SPEED_DIALS_DETAIL,
    ACT_ID_CONTACTS_SPEED_DIALS_OPTION,
    ACT_ID_CONTACTS_SPEED_DIALS_REPLACE,
    ACT_ID_CONTACTS_SPEED_DIALS_ASSIGN_APP,
    ACT_ID_CONTACTS_SPEED_DIALS_DEL,
    ACT_ID_CONTACTS_NOSCREEN,
    ACT_ID_CONTACTS_NOSCREEN_OPTION,
    ACT_ID_CONTACTS_NOSCREEN_ADD_NUMBER,
    ACT_ID_CONTACTS_NOSCREEN_SEARCH,
    ACT_ID_CONTACTS_NOSCREEN_ADDED,
    ACT_ID_CONTACTS_NOSCREEN_DELETE,
    ACT_ID_CONTACTS_NOSCREEN_NUM_DELETED,
    ACT_ID_CONTACTS_ADD_NUM_SCRN,
    ACT_ID_CONTACTS_SELECT_ONE,
    ACT_ID_CONTACTS_SELECT_MULTI,/*196*/

    ACT_ID_SETTING,
    ACT_ID_SETTING_DUAL_SIM_SETTINGS,
    ACT_ID_SETTING_DUAL_DEFAULT_SIM,
    ACT_ID_SETTING_DUAL_DEFAULT_SIM_DONE,
    ACT_ID_SETTING_DUAL_STANDBY_MODE,
    ACT_ID_SETTING_DUAL_STANDBY_ACTIVE,
    ACT_ID_SETTING_DUAL_STANDBY_DISCONNECTING,
    ACT_ID_SETTING_DUAL_STANDBY_CONNECTION_ENDED,
    ACT_ID_SETTING_DUAL_SIM_NAME,
    ACT_ID_SETTING_DUAL_SIM_NAME_EDIT,
    ACT_ID_SETTING_TONE_SETTINGS,
    ACT_ID_SETTING_SIM_SELECTION,
    ACT_ID_SETTING_RINGING_TONE,
    ACT_ID_SETTING_DONE,
    ACT_ID_SETTING_VIBRATING_ALERT,
    ACT_ID_SETTING_MESSAGE_ALERT,
    ACT_ID_SETTING_WARNING_TONES,
    ACT_ID_SETTING_DISPLAY_SETTINGS,
    ACT_ID_SETTING_WALLPAPERS,
    ACT_ID_SETTING_BACKLIGHT,
    ACT_ID_SETTING_BACKLIGHT_TIME_OUT,
    ACT_ID_SETTING_STANDBY_SCREEN,
    ACT_ID_SETTING_PROFILES_LIST,
    ACT_ID_SETTING_PROFILE_SETTING,
    ACT_ID_SETTING_TIME_SCROLL,
    ACT_ID_SETTING_TIME_SETTINGS,
    ACT_ID_SETTING_CLOCK_SETTING,
    ACT_ID_SETTING_TIME_FORMAT,
    ACT_ID_SETTING_DATE_SCROLL,
    ACT_ID_SETTING_DISPLAY_TIME_DATE,
    ACT_ID_SETTING_AUTO_UPDATE_TIME,
    ACT_ID_SETTING_CALL_SETTINGS,
    ACT_ID_SETTING_CALL_DIVERT,
    ACT_ID_SETTING_CALL_DIVERT_ACTION,
    ACT_ID_SETTING_CALL_DIVERT_NUMBER,
    ACT_ID_SETTING_CALL_DIVERT_TO,
    ACT_ID_SETTING_CALL_DIVERT_DELAY_TIME,
    ACT_ID_SETTING_PHONE_SETTINGS,
    ACT_ID_SETTING_LANGUAGE_SETTING,
    ACT_ID_SETTING_KEYGUARD_SETTINGS,
    ACT_ID_SETTING_DELAY_SETTING,
    ACT_ID_SETTING_ENTER_SECURITY_CODE,
    ACT_ID_SETTING_ON_OFF,
    ACT_ID_SETTING_NETWORK_SELECTION,
    ACT_ID_SETTING_NETWORK_SEARCHING,
    ACT_ID_SETTING_OPERATORS_LIST,
    ACT_ID_SETTING_NETWORK_REQUESTING,
    ACT_ID_SETTING_WELCOME_NOTE,
    ACT_ID_SETTING_WELCOME_NOTE_OPT,
    ACT_ID_SETTING_SECURITY_SETTINGS,
    ACT_ID_SETTING_CHANGE_ACCESS_CODE,
    ACT_ID_SETTING_CODE_ERROR,
    ACT_ID_SETTING_VOLTE_SWITCH,
    ACT_ID_SETTING_WLAN,
    ACT_ID_SETTING_WLAN_SAVED_AP,
    ACT_ID_SETTING_WLAN_LOGIN,
    ACT_ID_SETTING_WLAN_SAVED_NW,
    ACT_ID_SETTING_WLAN_DEL_SAVED_NW,
    ACT_ID_SETTING_WLAN_INPUT,
    ACT_ID_SETTING_WLAN_OPT,
    ACT_ID_SETTING_WLAN_ADD_NW,
    ACT_ID_SETTING_WLAN_SEL_SECURITY,
    ACT_ID_SETTING_WLAN_STATUS, /*259*/

    ACT_ID_GOTO,
    ACT_ID_GOTO_SETTINGS,
    ACT_ID_GOTO_SETTINGS_OPTIONS,
    ACT_ID_GOTO_SETTINGS_SAVED,
    ACT_ID_GOTO_SETTINGS_MOVE,  /*264*/

    ACT_ID_ALARM,
    ACT_ID_ALARM_SET,
    ACT_ID_ALARM_SET_TIME,
    ACT_ID_ALARM_REPEAT,
    ACT_ID_ALARM_REPEAT_SELECT,
    ACT_ID_ALARM_ONCE_SELECTED,
    ACT_ID_ALARM_REPEAT_SELECTED,
    ACT_ID_ALARM_ON,
    ACT_ID_ALARM_EDIT,
    ACT_ID_ALARM_OFF,
    ACT_ID_ALARM_TONE,
    ACT_ID_ALARM_TONE_SELECTED,
    ACT_ID_ALARM_RINGING_TONE,
    ACT_ID_ALARM_RING,
    ACT_ID_ALARM_RING_STOP,
    ACT_ID_ALARM_RING_DELAY,
    ACT_ID_ALARM_RING_OFF,           /*281*/

    ACT_ID_CALCULATOR,
    ACT_ID_CALCULATOR_WARNING,       /*283*/

    ACT_ID_CALENDAR,
    ACT_ID_CALENDAR_OPTION,
    ACT_ID_CALENDAR_GO_TO_DATE,
    ACT_ID_CALENDAR_FOR_CHINESE,
    ACT_ID_CALENDAR_LUNAR_CALE,
    ACT_ID_CALENDAR_ADD_REMINDER,
    ACT_ID_CALENDAR_SET_ALARM,
    ACT_ID_CALENDAR_SET_TIME,
    ACT_ID_CALENDAR_SET_DATE,
    ACT_ID_CALENDAR_DATE_PAST,
    ACT_ID_CALENDAR_REMINDER_ADDED,
    ACT_ID_CALENDAR_VIEW_TODAY,
    ACT_ID_CALENDAR_VIEW_ALL,
    ACT_ID_CALENDAR_VIEW_OPTION,
    ACT_ID_CALENDAR_VIEW_EDIT,
    ACT_ID_CALENDAR_DELETE,
    ACT_ID_CALENDAR_REMINDER_DELETED,
    ACT_ID_CALENDAR_REMINDER_MEMORY_EMPTY,
    ACT_ID_CALENDAR_REMINDER_ALARM_RING,
    ACT_ID_CALENDAR_ALARM_POSTPONED,
    ACT_ID_CALENDAR_REMINDER_DISCARDED,
    ACT_ID_CALENDAR_ADD_REMINDER_MEM_FULL,
    ACT_ID_CALENDAR_ADD_REMINDER_MEM_FULL_TO_EMPTY,/*306*/

    ACT_ID_BOOT_ANIMATION,
    ACT_ID_WELCOME_NOTE,
    ACT_ID_DESKTOP,
    ACT_ID_SWITCH_OFF,
    ACT_ID_SHUTDOWN_ANIMATION,
    ACT_ID_MENU,
    ACT_ID_CHARGE_ANIMATION,
    ACT_ID_KEY_GUARD,
    ACT_ID_DESKTOP_UNLOCK,
    ACT_ID_ASK_ABOUT_POWER_ON,
    ACT_ID_DESKTOP_MISSED_CALL,
    ACT_ID_DESKTOP_UNREAD_SMS,
    ACT_ID_STATUS_BAR,              /*319*/

    /*for interphone demo*/
    ACT_ID_WT_LOGIN,
    ACT_ID_WT_SETTING,
    ACT_ID_WT_GROUP_LIST,
    ACT_ID_WT_GROUPMEMBER_LIST,
    ACT_ID_WT_FRIEND_LIST,
    ACT_ID_WT_QUIT_OPT,
    ACT_ID_WT_POWEROFF,            /*326*/
    /* for 128*64 demo */
    ACT_ID_DEMO_128x64,

    /* for audio player */
    ACT_ID_AUDIO_PLAYER,
    ACT_ID_AUDIO_PLAYER_MOUNTED_AS_USB,
    ACT_ID_AUDIO_PLAYER_OPT,
    ACT_ID_AUDIO_PLAYER_SETTING,
    ACT_ID_AUDIO_PLAYER_ALL_SONGS,  /*332*/

    ACT_ID_BT,
    ACT_ID_BT_PAIRED,
    ACT_ID_BT_SCANED,
    ACT_ID_BT_PROCESS,
    ACT_ID_BT_NAMEEDIT,      /*337*/

    ACT_ID_CAMERA,           /*338*/

    ACT_ID_ANY,
    ACT_ID_MAX = ACTIVITY_ID_MAX
} ;
typedef UINT16 ACTIVITY_ID;

typedef void (*Void_Func_t)(void);
typedef void (*Void_P_Func_t)(void *);

typedef struct {
    Void_P_Func_t OnShow;           /* Show UI */
    Void_Func_t   OnHide;           /* Hide UI */
    Void_P_Func_t OnCreate;         /* Create function called when this activity is pushed into stack */
    Void_P_Func_t OnDestroy;        /* Destroy function called when this activity is popped from stack.
                                     * 'Param' shall be freed in this function */
    Void_P_Func_t OnSaveState;      /* Save state before forward to another activity */
    Void_P_Func_t OnRestoreState;   /* Restore state after backward from another activity */
} Nav_Func_List_t;

typedef struct {
    ACTIVITY_ID     ActId;    /* activity ID */
    Nav_Func_List_t FuncList; /*Function list */
    void            *Param;   /* Parmeter passed to function */
} Nav_Stack_t;

/**********************
* GLOBAL PROTOTYPES
**********************/

/**
 * Navigate init.
 * should be called before calling any other Nav functions.
 */
void Nav_Init(void);

/**
 * Navigate reset.
 */
void Nav_Reset(void);

/**
 * Navigate forward to the specified activity.
 * This method will find the first activity which ID is equal to 'ActId' in the stack from top to bottom,
 * if the activity is not existed, then create a new activity and push it into the stack;
 * if the activity is existed, then pop to that activity.
 * param (in) SrcActId:  source activity ID
 * param (in) DestActId: destination activity ID
 * param (in) FuncList:  function list
 * param (in) Param:  parameter passed to the forward activity
 * return void
 */
void Nav_Forward(ACTIVITY_ID SrcActId, ACTIVITY_ID DestActId, Nav_Func_List_t *FuncList, void *Param);

/**
 * Navigate backward to the previous activity.
 * param (in) SrcActId:  source activity ID
 */
void Nav_Back(ACTIVITY_ID SrcActId);

/**
 * Navigate to home, i.e. desktop activity.
 * param (in) SrcActId:  source activity ID
 */
void Nav_Home(ACTIVITY_ID SrcActId);

/**
 * Navigate backward to 'BackwardId' activity in the stack,
 * and then forward to 'ForwardId' activity
 * param (in) SrcActId:    source activity ID
 * param (in) BackwardId:  activity ID backward to
 * param (in) ForwardId:   activity ID forward to
 * param (in) ForwardFuncList:  function list of 'ForwardId' activity
 * param (in) ForwardParam:     parameter of 'ForwardId' activity
 * return void
 */
void Nav_Backward_And_Forward(ACTIVITY_ID SrcActId, ACTIVITY_ID BackwardId, ACTIVITY_ID ForwardId, Nav_Func_List_t *ForwardFuncList, void *ForwardParam);

/**
 * Get top activity ID.
 * param void
 * return ACTIVITY_ID
 */
ACTIVITY_ID Nav_Get_Top(void);

/**
 * Get previous activity ID.
 * param ActId:  activity ID
 * return previous activity ID
 */
ACTIVITY_ID Nav_Get_Prev(ACTIVITY_ID ActId);

/**
 * Get Param from stack.
 * param ActId:  ActId you want to get param
 * return void
 */
void* Nav_Get_Param(ACTIVITY_ID ActId);

/**
 * Get index by ActId.
 * param ActId:  activity ID
 * return index, -1 if not found
 */
INT8 Nav_Get_Index(ACTIVITY_ID ActId);

/**********************
*      MACROS
**********************/

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /*NAV_H*/
